package dingdan

import (
	"fmt"
	"server/a0"

	"gorm.io/gorm"
)

func A以时间分组统计(dateBefore, dateAfter, timeType string) (单天订单组 []S单天订单, err error) {
	// 定义时间格式化模板（对应 MySQL 的 FROM_UNIXTIME 格式）
	timeFormat := "%w" // 默认周格式（0-6 对应周日到周六）
	switch timeType {
	case "week":
		timeFormat = "%w"
	case "month":
		timeFormat = "%d" // 日（01-31）
	case "year":
		timeFormat = "%m" // 月（01-12）
	case "30":
		timeFormat = "%m-%d" // 月-日（01-01 至 12-31）
	}

	// 构建查询：按时间范围、支付状态、退款状态、商品ID筛选
	db := a0.A_DB.Model(Model{}).Where(Model{Paid: 1}).
		// 转换字符串日期为时间戳
		Where("add_time BETWEEN UNIX_TIMESTAMP(?) AND UNIX_TIMESTAMP(?)", dateBefore, dateAfter).
		Where("refund_status = ?", 0).
		Where("pid IN (?, ?)", -1, 0)

	// 按时间格式分组统计（COUNT订单数、SUM支付金额）
	// FROM_UNIXTIME() 是 MySQL 数据库的一个内置函数，用于将 Unix 时间戳（即从 1970-01-01 00:00:00 UTC 开始计算的秒数）转换为 可读性更强的日期时间格式（如 2025-10-10 10:28:29 或 10-10 等）
	db = db.Debug()
	err = db.
		Select("FROM_UNIXTIME(add_time, ?) as day, COUNT(*) as count, SUM(pay_price) as price", timeFormat).
		Group(fmt.Sprintf("FROM_UNIXTIME(add_time, '%s')", timeFormat)).
		Order("add_time ASC").
		Scan(&单天订单组).Error

	return
}

func A以时间统计(dateBefore, dateAfter string) (total *S总计, err error) {
	err = a0.A_DB.Model(&Model{}).
		Where("add_time BETWEEN ? AND ?", dateBefore, dateAfter).
		Select("COUNT(*) as count, SUM(pay_price) as price").
		First(&total).Error

	// 处理空结果（无符合条件的订单时，返回空指针而非错误）
	if err != nil && err != gorm.ErrRecordNotFound {
		return nil, err // 非“未找到”错误才返回错误
	}
	return
}
